package com.gbas.cartas;

import com.gbas.model.Naipe;
import pulpcore.Input;
import pulpcore.image.CoreGraphics;
import pulpcore.image.CoreImage;
import pulpcore.sprite.Sprite;

import java.util.HashMap;
import java.util.Map;

/**
 * User: t50
 * Date: 08-abr-2010
 * Time: 0:36:21
 */
public class Carta extends Sprite {
    public final static Map<String, CoreImage> naipesMapa = new HashMap<String, CoreImage>();

    Naipe naipe;
    boolean mostrada;
    boolean enciclo;
    int faseCiclo;
    int countNextFrame;
    int rotation = 0;
    static final private int timeFrameCicle = 70;

    public int getRotation() {
        return rotation;
    }

    public void setRotation(int rotation) {
        this.rotation = rotation;
    }

    public Naipe getNaipe() {
        return naipe;
    }

    public void setNaipe(Naipe naipe) {
        this.naipe = naipe;
    }

    public boolean getMostrada() {
        return mostrada;
    }

    public void setMostrada(boolean mostrada) {
        this.mostrada = mostrada;
    }

    public Carta(Naipe naipe, int x, int y) {
        this(naipe, x, y, false);
    }


    public Carta(Naipe naipe, int x, int y, boolean mostrar) {
        super(x, y, 81, 120);
        this.naipe = naipe;
        this.mostrada = mostrar;
        this.enciclo = false;

    }

    CoreImage getRotation(CoreImage ci) {
/*
        if (rotation == 1) {
            return ci.rotateLeft();
        }
        if (rotation == 2) {
            return ci.rotate180();
        }
        if (rotation == 3) {
            return ci.rotateRight();
        }
*/
        return ci;
    }

    @Override
    protected void drawSprite(CoreGraphics g) {
        if (!enciclo) {
            if (mostrada) {
                g.drawImage(getRotation(naipesMapa.get(naipe.nameOfImage())));

            } else {
                g.drawImage(getRotation(naipesMapa.get("back")));
            }
        } else {
            int ancho;
            int px;
            CoreImage image;
            if (mostrada) {
                if (faseCiclo < 5) {
                    // back cerrandose
                    px = (10 * faseCiclo);
                    ancho = 80 - (20 * faseCiclo);
                    image = naipesMapa.get("back");
                } else {
                    // Carta abriendose
                    ancho = 20 * (faseCiclo - 5);
                    image = naipesMapa.get(naipe.nameOfImage());
                    px = 10 * (9 - faseCiclo);
                }
            } else {
                if (faseCiclo < 5) {
                    // Carta cerrandose
                    ancho = 80 - (20 * faseCiclo);
                    px = (10 * faseCiclo);
                    image = naipesMapa.get(naipe.nameOfImage());
                } else {
                    // Back abriendose
                    px = 10 * (9 - faseCiclo);
                    ancho = 20 * (faseCiclo - 5);
                    image = naipesMapa.get("back");
                }

            }
            if (ancho == 0) {
                ancho = 1;
            }
            g.drawScaledImage(getRotation(image), px, 0, ancho, 120);
        }
    }

    public void flip() {
        mostrada = !mostrada;
        enciclo = true;
        countNextFrame = 0;
        faseCiclo = 1;
        setDirty(true);
    }

    @Override
    public void update(int elapsedTime) {
        super.update(elapsedTime);
        if (enciclo) {
            countNextFrame += elapsedTime;
            if (countNextFrame >= timeFrameCicle) {
                countNextFrame -= timeFrameCicle;

                faseCiclo++;
                if (faseCiclo == 10) {
                    enciclo = false;
                }
                setDirty(true);
            }
/*
        } else {
            if (Input.isMouseDown()) {
                flip();
            }
*/
        }

    }
}
